package rta.datos.conexion
{
	import flash.data.SQLConnection;
	import flash.data.SQLResult;
	import flash.data.SQLStatement;
	import flash.events.SQLErrorEvent;
	import flash.events.SQLEvent;
	
	import mx.collections.ArrayCollection;
	
	import rta.datos.to.Secuencia;

	public class SecuenciaDB
	{
		private var conn:SQLConnection;
		private var statement:SQLStatement;
		private var _callback:Function;
		private var esImportacion:Boolean = false;
		
		public function SecuenciaDB(conn:SQLConnection)
		{
			this.conn = conn;
			statement = new SQLStatement();
			statement.itemClass = Secuencia;
			statement.sqlConnection = conn;
			statement.addEventListener(SQLErrorEvent.ERROR, onSQLError);
		}
		
		public function set callback(value:Function):void
		{
			_callback = value;
		}
		
		
		private function onSQLError(event:SQLErrorEvent):void{
			trace(event.text);
		}
		//-------------------------------------------------
		
		
		//--OBTENER SECUENCIA DE PERFIL-----------
		public function obtenerSecuenciaActiva(idPerfil:int):void{					
			statement.text = "SELECT id_secuencia id " +
							 "FROM secuencia " +
							 "WHERE id_perfil = @idPerfil";
			statement.parameters["@idPerfil"] = idPerfil;
			statement.addEventListener(SQLEvent.RESULT, resultObtenerSecuenciaActiva);
			statement.execute();
		}
		
		private var secuenciaActual:Secuencia;
		private function resultObtenerSecuenciaActiva(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultObtenerSecuenciaActiva);
			statement.clearParameters();
			
			var result:SQLResult = statement.getResult();
			if (result != null && result.data && result.data.length > 0) {  
				secuenciaActual = result.data[0] as Secuencia;
				
				var imagenSecuenciaDB:ImagenSecuenciaDB = new ImagenSecuenciaDB(this.conn);
				imagenSecuenciaDB.callback = resultImagenesSecuencia;
				imagenSecuenciaDB.obtenerImagenesDeSecuencia(secuenciaActual.id);
			}
			else{
				//El perfil no tiene una secuencia activa
				if(this._callback != null)
					this._callback(new Secuencia());
			}
		}
		
		private function resultImagenesSecuencia(imagenesSecuencia:ArrayCollection):void{
			secuenciaActual.imagenesSecuencia = imagenesSecuencia;
			
			if(this._callback != null)
				this._callback(secuenciaActual);
		}
		//-------------------------------------
		
		//--CREAR SECUENCIA PARA PERFIL--------
		public function crearSecuencia(idPerfil:int, importacion:Boolean=false):void{
			this.esImportacion = importacion;
			
			statement.text = "INSERT INTO secuencia(id_perfil) VALUES(@idPerfil)";
			statement.parameters["@idPerfil"] = idPerfil;
			statement.addEventListener(SQLEvent.RESULT, resultCrearSecuencia);
			statement.execute();
		}
		
		private function resultCrearSecuencia(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultCrearSecuencia);
			statement.clearParameters();
			if (this._callback != null) {
				if(esImportacion){
					statement.text = "SELECT MAX(id_secuencia) id FROM secuencia";
					statement.addEventListener(SQLEvent.RESULT, resultObtenerId);
					statement.execute();
				}
				else{
					this._callback();
				}
			}
		}
		
		private function resultObtenerId(event:SQLEvent):void{
			statement.removeEventListener(SQLEvent.RESULT, resultObtenerId);
			
			var result:SQLResult = statement.getResult();
			if (result != null && result.data && result.data.length > 0) {  
				var secuencia:Secuencia = result.data[0] as Secuencia;
				
				_callback(secuencia.id);
			}
		}
		//-------------------------------------
	}
}